package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import org.apache.poi.ss.formula.functions.Count;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Handler;

/**
 * @author Fengkai
 * @creat 2023/4/13
 * 通讯网络中有N个网络节点
 * 用1 ~ N进行标识
 * 网络通过一个有向无环图进行表示
 * 其中图的边的值，表示节点之间的消息传递延迟
 * 现给定相连节点之间的延时列表times[i]={u,v,w}
 * 其中u表示源节点，v表示目的节点，w表示u和v之间的消息传递延时
 * 请计算给定源节点到目的节点的最小传递延迟
 * 如果目的节点不可达请返回-1
 * 注意：N 的取值范围是1 ~ 100
 * 延迟times列表长度不超过6000
 * 且1 <= u,v <= N,0 <= w <= 100
 * 输入
 * 输入第一行为两个正整数，分别为网络节点个数N以及延时列表长度M，用空格分隔
 * 接下来的M行为两个节点间的延时列表[u,v,w]
 * 输入的最后一行为两个正整数u和v分别表示源节点和目的节点
 * 输出
 * 输出一个整数表示源节点到目的节点的最小延时
 */
public class FindMinMapLength {
    public static HashMap<Integer, Map<Integer, Integer>> tu = new HashMap<>();
    public static int result = Integer.MAX_VALUE;
    public static int cache = 0;

    public static void main (String[] args) {
        String s = "1 2 11,2 3 13,1 3 50";
        String[] split = s.split(",");
        setTu(split);
        find(tu, 1, 3);
        System.out.println(result);
    }

    //建单向图
    public static void setTu (String[] values) {
        for (int i = 0; i < values.length; i++) {
            String[] s = values[i].split(" ");
            Map<Integer, Integer> orDefault = tu.getOrDefault(Integer.parseInt(s[0]), new HashMap<>());
            orDefault.put(Integer.parseInt(s[1]), Integer.parseInt(s[2]));
            tu.put(Integer.parseInt(s[0]), orDefault);
        }
    }

    public static void find (Map<Integer, Map<Integer, Integer>> map, int v, int m) {
        Map<Integer, Integer> integerIntegerMap = map.get(v);
        for (Integer integer : integerIntegerMap.keySet()) {
            if (m == integer) {
                cache += integerIntegerMap.get(m);
                result = Math.min(result, cache);
                cache = 0;
            } else {
                cache += integerIntegerMap.get(integer);
                find(map, integer, m);
            }
        }
    }
}
